iT邦幫忙

DAY 20
0

從想法到快速實作的捷徑:Rails系列 第 20

[ Day 20 ] 文章的分類功能 - (上)

  • 分享至 

  • xImage
  •  

這裡要來稍微再整理一下待做的功能:

  • 文章的國籍分類

  • 文章的tag功能

接著將分兩部分來完成:

文章的各國媒體分類

這裡其實有很多種做法,

可以在posts/_form.html.erb中加入select tag,

也可以乾脆新增一個country的model,這樣還能讓使用者新增各國媒體的分類。

不過在這裏我想要先用簡單的用enumerize來做:(枚舉)

先把要的媒體分類列出來:

  • 法媒
  • 俄媒
  • 阿媒
  • 德媒
  • 韓媒
  • 西媒
  • 日媒
  • 波蘭媒
  • 捷媒
  • 土媒

這裡要先做的事情當然是先新增一個欄位給post:

rails g migration add\_contry\_classification\_to\_posts country\_classification:string

再安裝enumerize這個gem,接著在post.rb裡面加入:

class Post < ActiveRecord::Base
  validates :title, presence: true, length: {maximum: 50}
  extend Enumerize

  enumerize :country_classification, 
  in: %w[Franch Russia Arab Germany Korean Spanish Japan Polish Czech Turkey]
  belongs_to :user
end

然後就可以去i18n裡面設定了:

  enumerize:
    post:
      country_classification:
        Franch: 法媒 
        Russia: 俄媒 
        Arab: 阿媒 
        Germany: 德媒 
        Korean: 韓媒 
        Spanish: 西媒 
        Japan: 日媒 
        Polish: 波蘭媒 
        Czech: 捷克媒 
        Turkey: 土媒

接下來解決完strong parameter之後,再到form裡面加上這個欄位:

  <%= f.select :country_classification, Post.country_classification.options,{}, {class: "form-control"} %>

就大功告成啦!

而我仍然是想讓網站儘量能保有原來的樣子,

所以會新增render_titile這個method在model中。

  def render_title
    if country_classification.present?
      "【#{country_classification.text}】 #{title}"
    else
      "【尚未分類】 #{title}"
    end
  end

再來將index中的post.title替換成post.render_title就可以了!


上一篇
[ Day 19 ] 支援多國語系 - i18n
下一篇
[ Day 21 ] 文章的分類功能 - (下)
系列文
從想法到快速實作的捷徑:Rails30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言